package com.guoxue.util.codeSwitch;

import org.apache.log4j.Logger;

/**
 * 打印管理类(基类)
 * 
 * @author zt
 * 
 */
public abstract class PrintBase {

	private static Logger logger = Logger.getRootLogger();
	private static Logger logger_daily = Logger.getLogger("daily");

	private static Logger logger_sysDoubt = Logger.getLogger("sysDoubt");
	private static Logger logger_sysFatal = Logger.getLogger("sysFatal");
	private static Logger logger_sysBg = Logger.getLogger("sysBg");

	/** 打印测试 */
	public static void testLoggers() {
		PrintBase.print_bg("testLoggers_bg_中文_测试", null);
		PrintBase.print_doubt("testLoggers_doubt_中文_测试", null);
		PrintBase.print_sys("testLoggers_sys_中文_测试");
		PrintBase.printDaily("testLoggers_daily_中文_测试", null);
		PrintBase.printDebug("testLoggers_debug_中文_测试", null);
		PrintBase.printError("testLoggers_error_中文_测试", null);
		PrintBase.printFatalError("testLoggers_Fatal_中文_测试", null);
		PrintBase.printInfo("testLoggers_info_中文_测试", null);
		PrintBase.printWarning("testLoggers_warn_中文_测试", null);
	}

	/**
	 * 打印系统监控信息(启动,后台线程等)
	 * 
	 * @param info
	 */
	public static void print_sys(String info) {
		// logger.error(info);
		logger.info(info);
		// System.out.println(info);
	}

	/** 打印疑点 */
	public static void print_doubt(String info, CodeSwitch cs) {
		if (cs != null && cs.isOn() == false) {
			return;
		}
		logger_sysDoubt.info(info);
	}

	/** 打印后台操作 */
	public static void print_bg(String info, CodeSwitch cs) {
		if (cs != null && cs.isOn() == false) {
			return;
		}
		logger_sysBg.info(info);
	}

	/** 打印调试信息 */
	public static void printDebug(String info, CodeSwitch cs) {
		if (cs != null && cs.isOn() == false) {
			return;
		}
		logger.debug(info);
	}

	/** 打印常规日志信息 */
	public static void printInfo(String info, CodeSwitch cs) {
		if (cs != null && cs.isOn() == false) {
			return;
		}
		logger.info(info);
	}

	/** 打印警告信息 */
	public static void printWarning(String info, CodeSwitch cs) {
		if (cs != null && cs.isOn() == false) {
			return;
		}
		logger.warn(info);
	}

	/** 打印每日例行工作信息 */
	public static void printDaily(String info, CodeSwitch cs) {
		if (cs != null && cs.isOn() == false) {
			return;
		}
		logger_daily.info(info);
	}

	/** 打印错误信息 */
	public static void printError(String info, CodeSwitch cs) {
		if (cs != null && cs.isOn() == false) {
			return;
		}

		logger.error(info);
	}

	/** 打印异常错误信息 */
	public static void printError(String info, CodeSwitch cs, Exception e) {
		if (cs != null && cs.isOn() == false) {
			return;
		}
		logger.error(info, e);
	}

	/** 打印异常 */
	public static void print_stackTrace(Throwable e) {
		logger.error(null, e);
	}

	/** 打印严重错误信息! */
	public static void printFatalError(String info, CodeSwitch cs) {
		if (cs != null && cs.isOn() == false) {
			return;
		}
		// logger.fatal(info);
		logger_sysFatal.info(info);
	}

	public static void println(String info) {
		logger.info(info);
	}

	public static String dumpByteArray(byte[] data, int radix) {
		int i, length, value;
		final StringBuilder sb = new StringBuilder();
		if (data == null) {
			return "";
		}
		length = data.length;
		if (radix == 0 || radix == 16) {
			for (i = 0; i < length; i++) {
				value = data[i];
				sb.append(Integer.toHexString(value & 0xff)).append(',');
			}
		}
		else {
			for (i = 0; i < length; i++) {
				sb.append(data[i]).append(',');
			}
		}
		return sb.toString();
	}

	// /////////////////////////////////////////////////////////////////////////////////////////////
	// --->缺省的开关(不要修改):
	// /////////////////////////////////////////////////////////////////////////////////////////////

	/** 仅在本地有效(外网无效),且在开发期和运营期都一直有效的代码 */
	public static final CodeSwitch cs__本地代码_一直有效 = new CodeSwitch(10000,
			CodeSwitch.TYPE_LOCAL);
	/** 仅在外网有效(本地无效),且在开发期和运营期都一直有效的代码 */
	public static final CodeSwitch cs__外网代码 = new CodeSwitch(10000,
			CodeSwitch.TYPE_OUT_LINUX);

	/** 仅在开发服务器(含内网和外网)上有效的代码,在正式运营的服务器上无效 */
	public static final CodeSwitch cs__开发服务器代码 = new CodeSwitch(0);

	// /** 管理测试代码(不推荐使用,应尽量多定义有具体含义,可以独立配置的开关) */
	// public static final CodeSwitch cs__临时测试代码 = new CodeSwitch(0);
	/** 仅在开发期有效(运营期无效)的代码。此开关在正式运营前必须关闭 */
	public static final CodeSwitch cs__开发期代码 = new CodeSwitch(0);
	/** 在开发期有效,运营测试期有效,正式运营期无效的代码。 */
	public static final CodeSwitch cs__过渡期代码 = new CodeSwitch(1);
	/** 仅在开发期,且仅在本地有效的临时性代码 */
	public static final CodeSwitch cs__本地开发期代码 = new CodeSwitch(0,
			CodeSwitch.TYPE_LOCAL);

	/** 监控一些理论上不应发生的情况,给出报警 */
	public static final CodeSwitch cs__监控打印代码 = new CodeSwitch(10000);
	// /** 管理优化本地多服共用数据库的代码 */
	// public static final CodeSwitch cs__本地多服共用数据库代码 = new CodeSwitch(0,
	// CodeSwitch.TYPE_LOCAL);
}
